package com.epadmin.app.login;

import java.util.Map;

import com.ep.general.ActionSupportCustom;
import com.ep.general.admin.Administrator;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;

public class LoginInterceptor extends AbstractInterceptor {

	private static final long serialVersionUID = 4718191129121197832L;

	@Override
	public String intercept(final ActionInvocation invocation) throws Exception {
		Map<String, Object> session = ActionContext.getContext().getSession();
		Object action = invocation.getAction();

		Administrator admin = (Administrator) session.get(ActionSupportCustom.LOGGED_USER);

		if (admin != null) {
			if (action instanceof LoginAction)
				return ActionSupportCustom.START_PAGE;
			
			return invocation.invoke();
		}

		// jezeli akcja nie wymaga logowania pozwol sie jej wykonac
		if (!(action instanceof LoginRequierd)) {
			return invocation.invoke();
		}

		// akcja wymaga logowania
		// aktualna akcja nie jest strona logowania
		if (!(action instanceof LoginAction)) {
			return ActionSupportCustom.LOGIN;
		}

		// pozostale przypadki
		return invocation.invoke();
	}
}
